約 2,529,288 件
https://w.atwiki.jp/gdiplusplus/pages/27.html
簡易履歴(作業工程は省略) http //free.flop.jp/gdi++/ IVS対応 847 850 FontLoader廃止(0848で復帰) 847 バッファオーバーラン修正 787 TLSのリーク修正 777 StringCch系を使って安全に 770 Link/Substitutes/ForceChangeをDllMainの外に 768 排他制御変更 std map - ATL CSimpleMap 765(SSE2) Detours.dll DDKビルド 763 ソース刷新 761 762 フック処理変更 761 717 Light-LCDとRenderWeightのテスト 715 717 -waitオプション追加(680で廃止) 672 Vista対応テスト 659(パッチ) 662 GetGlyph(ry→FT_Glyph(ryの試作 612 613 657 669 672 680 計算関連のバグ修正 608 609 613 606 グリフ取得置き換えテスト 606 FontSubstitutes テスト 593 602 斜体選択時のズレ修正 589* 末尾が...になる対策 583 589 593 FontLinkテスト 572 578 582 カレントディレクトリ修正 577* 570 高速化 変換スキップ等 557 570* コントラスト実装/ガンマ調整 534 545* ガンマ実装 459 470 529* Manager修正 466* 斜体修正 504* GetGlyphOutlineテスト 456 489 392(424) 補足 カッコ内数字 補完アップロード 列が同じ 同一修正が複数版にマージされている 行が同じ 同一目的の修正が続けられている 行先頭 ベースビルド(ソース) アスタリスク 作業終了(もしくは安定版/ベース候補/マージ済み) ICC9氏ビルド一覧 Base 1st 2nd 3rd gdi0682.zip gdi0683.zip gdi0696.zip gdi0704.zip 0680 NormalWeight 変更 gdi0680.zip gdi0681.zip 0672 修正 gdi0657.zip gdi0658.zip 0652 の修正 gdi0652.zip gdi0653.zip 0650 の修正 gdi0650.zip gdi0651.zip 0648 の修正 gdi0645.zip gdi0646.zip 0641 の修正 gdi0641.zip gdi0643.zip 0639 修正 gdi0634.zip gdi0637.zip 0632 の修正 gdi0632.zip gdi0633.zip 0629 の修正 gdi0624.zip gdi0627.zip 0616 の修正 gdi0616.zip gdi0618.zip 0613 の修正 gdi0613.zip gdi0614.zip 0609 に 0612 をマージ gdi0608.zip gdi0611.zip ? gdi0602.zip gdi0604.zip 0596 文字欠け対策 gdi0596.zip gdi0597.zip 0593 修正 gdi0593.zip gdi0595.zip ... テスト4 + α gdi0572.zip gdi0574.zip FontLinkテスト暫定 gdi0570.zip gdi0571.zip 0567 の修正 gdi0567.zip gdi0569.zip 文字ズレ対策 gdi0564.zip gdi0566.zip 0562 修正 gdi0545.zip gdi0550.zip 0540 の修正 gdi0537.zip gdi0538.zip ? gdi0524.zip gdi0528.zip gdi0530.zip ?
https://w.atwiki.jp/tidlv4/pages/24.html
Group(GDI) Rendererにはひとつのみしか接続できない為、これを利用することで二つのGDI形式のノードを接続することができる。 1 Layer1 2 Layer2 Ⅰ Layer 1と2につないだノードをⅠで二つ表示できる。
https://w.atwiki.jp/gdiplusplus/pages/30.html
1.使い方 2.バイナリ 3.readme 4.SS 5.履歴 使用にあたって 使い方 オプション一覧 使用にあたって 言うまでも無く、非常に危険な代物です。ソフトウェアの挙動を理解した上でご利用ください。CPUパワーを必要とするので、できるだけハイスペックなPCをお奨めします。 現在のところ、Windows 2000/XP で動作するハズですが、基本的にXPでのみ動作確認しています。使用は自己責任でお願いします。どんな損害がおこっても補償できません。 使い方 仕掛けたい実行ファイルをgdi++.exeにドラッグ ドロップすると、フックされた状態で起動します。Windows標準のコントロールのフォント描画にも影響が及びます。 オプション一覧 設定ファイル"gdi++.ini"を同じディレクトリに置くことで、レンダリングの設定ができます。(なくても動きます) [General] Quality=1 Weight=0 Enhance=0 UseSubPixel=0 SubPixelDirection=0 MaxHeight=0 ForceAntialiasedQuality=0 [Exclude] FixedSys Marlett メイリオ [Individual] Tahoma=3 [ExcludeModule] iexplore.exe firefox.exe Qualityフォントの品質を調節します。0 何もしない 1 2倍キレイ(デフォルト) 2 3倍キレイ 3 4倍キレイ Weightフォントの濃さを調節します。(n + 1)回重ねて描画します。 Enhance水平・垂直の輪郭線を強調します。0 強調しない(デフォルト) 1 少し強調 2 ふつうに強調 3 強く強調 4 激しく強調 UseSubPixel簡易サブピクセルレンダリング(ClearTypeもどき)を有効にします。0 つかわない(デフォルト) 1 つかう SubPixelDirectionサブピクセルレンダリングを使うときの、サブピクセルの並び順を指定します。ほとんどの液晶モニタは左からRGBの順にサブピクセルが並んでいますが、たまにBGRの順で並んでいるモニタもあるようです。0 RGB(デフォルト) 1 BGR MaxHeightスムージングを掛ける最大のフォントサイズを「ピクセル単位で」指定します。0 すべてのサイズ(デフォルト) ForceAntialiasedQualityWindowsのClearTypeを無視するかどうかを指定します。無視すれば描画が高速になります。0 標準の品質(デフォルト) 1 ClearTypeを無視 [Exclude]セクション標準のレンダラで描画したいフォントを一行に一書体ずつ記入します。フォント名がリストに合致すれば、gdi++.dll は標準のレンダラに描画を丸投げします。ビットマップフォントや、ClearType系のフォントにどうぞ。 [Individual]セクション指定したフォント毎にWeightを設定できます。 [ExcludeModule]セクションgdi++.dllを適用させたくない実行ファイルを指定できます。このセクションに記述された実行ファイルにはgdi++.dllが適用されません。
https://w.atwiki.jp/helium/pages/12.html
このバージョンは実験版です。 一応 0789 ベースですが、もはやソースレベルでは別物です。 以下のどれかに納得できない人は、今すぐ削除して 0787 でも使いましょう。 マニュアル(これ)なんて読んでられるかYO!→実験版なのでマニュアル読まない人は使わないで下さい。 うちの CPU、SSE2 に対応してないんですけど・・・→頻繁に呼ばれる部分を随時 SIMD 化しているので、もう対応できません。 ごめんなさい。 FreeTypeは 必 ず gdi0770 の物を使用して下さい。この辺からDLできます。 重大な欠陥が見つかった場合は予告無しにあぷろだから削除します。無用なトラブルを避けるためにも再up・転載は控えてください。 概要 gdi++.dll のコアエンジン( Helium と呼ぶ事にする)をフルスクラッチした。 具体的には SourceMonitor で Max Complexity が 30 以下。 FreeType の内蔵キャッシュの使用を廃止し、メモリ管理を見直した。 MS Pゴシックなどの太字やイタリック体をエミュレートしているフォントで FontStream を使いまわす事にした。 必要最低限の API のみをフックする。後は GDI に任せる。 安定性の向上致命的なバグがない限り前のバージョンよりは安定するはず。 最低動作環境 Windows 2000 SP4、Windows XP SP2、Windows Vista 以降SP3 以前の 2000、SP1 以前の XP では動作保証外です。 動作確認したのは Windows 2000 SP4、Windows XP SP2 Home (いずれも日本語版) のみです。 それ以外 (2003/XP x64 Edition/Vista/2008RC) では動作確認していません。 一部 OS では初期状態で不具合が出ます。「一部 OS での問題」を読んでください。 SSE2 対応 CPUPentium 4、Pentium M、Athlon64 以降の CPU で動作します。 SSE2 非対応 CPU では gdi0787 / gdi0789 (SSE用)、 gdi0577 (P6用) が個人的おすすめ。 それなりのメモリ前のバージョンよりはメモリに易しくなってるはずです。 ただし gdippManager や gditray で全適用する場合は 512MB 以上を推奨。 マニュアルは Firefox か Opera で見てください。IE 系で見ると色々出なかったりずれたり正常に表示されない部分があります。 INI のオプション INI は 付 属 し な い ので、自分で調整して使うこと。 [General] ; 子プロセスにも自動適用 ; [0 Disable] 1 Enable HookChildProcesses=1 [Rasterize] ; ヒンティング方式 ; 0 NoHinting [1 Normal] 2 AutoHinting 3 Light HintingMode=2 ; アンチエイリアス方式 ; 0 Disable [1 Grayscale] 2 SubPixel(RGB) 3 SubPixel(BGR) AntiAliasMode=2 ; 標準のウェイト ; -32 +32 NormalWeight=4 ; 太字のウェイト ; -16 +16 BoldWeight=2 ; 斜体の傾き具合 ; -16 +16 ItalicSlant=0 ; 濃さの調整 ; -32 +32 Saturation=0 [Misc] ; gdi++に処理させる最大サイズ(ピクセル単位) ; 0-2147483647 MaxHeight=72 ; ガンマ補正を使う ; [0 Disable] 1 Enable GammaCorrection=0 ; α値を補間する ; 0-16 Interpolation=0 ; 縦書きを使用する VerticalText=0 ; モジュールリストの優先順位 ; [0 Deny] 1 Allow 2 Allow- Deny ModuleListOrder=2 [FreeType] ; FT_Library_SetLcdFilterに渡すパラメータ ; [0 None] 1 Default 2 Light 16 Legacy LcdFilter=1 ; FreeTypeのバージョンチェックをスキップ ; [0 Check] 1 Skip SkipVersionCheck=0 [Cache] ; キャッシュ MaxFamilies=8 MaxStyles=12 MaxBytes=8388608 [Individual] ; フォント別設定 ; Format FontName=Hinting,AAMode,NormalWeight,BoldWeight,ItalicSlant Tahoma=0 MS UI Gothic=,,-5 M+2P+IPAG=2 [FontLink] ; フォントリンクのような物 ; Format FontName=Name1,Name2,Name3, ... (Max 16) Tahoma = "MS UI Gothic", SimSun, PMingLiU [FontOverride] ; フォントの差し替え ; Format FontName=Name MS Sans Serif = Tahoma [Exclude] ; 除外フォント Marlett [AllowModule] ; 許可モジュールリスト firefox.exe [DenyModule] ; 拒否モジュールリスト hogehook.dll [UnloadDLL] ; ロードさせたくないプロセス ガンマ補正 旧バージョンでの GammaValue=2.0 相当のガンマ補正が有効になる。2.0 固定だと色々と計算が省けたのと、まあ Mac と Windows の平均値?だからいいかなと。 Saturation と合わせて調整すれば黒地に白文字が読みにくいことは無くなると思う。 1ピクセル単位で処理+浮動小数点型に変換してるので off の場合より描画が遅い。 α値の補間 背景色に応じてαチャンネルの値を補間する。暗い背景色ほど強く補間がかかるようになっている。 R,G,B の順で補間値を指定する。書式はInterpolation=6,5,8 (R=6, G=5, B=8 で補間) Interpolation=4 (R=4, G=4, B=4 で補間) Interpolation=0 (全て 0 で無効) など。 ガンマ補正と違って白地に黒文字でも薄くならず、描画が比較的軽い。が、AntiAliasMode=LCD で値を大きくするとカラフルになって逆に見辛くなるので注意。 GammaCorrection=1 の時は無視される。(ガンマ補正が優先される) 縦書き この設定を有効にすると GSUB と cmap を別個ロードするので、フォントの読込が遅くなる上にメモリ消費量も増える。 また、フォント依存・環境依存が激しく「表示できればラッキー」程度の物。 基本的に O F F を 推 奨 。ONにした設定を他人に勧めない事。 現時点では縦書き用 @ 付きフォントが使用できるだけで、縦書き表示には対応していません。 バージョンチェックをしない デバッグ用。FreeType はバイナリ互換とは限らないようなのでこの設定は触らないこと。 現時点では指定しても無視されます。(バージョンチェックをスキップできない) キャッシュ MaxFamilies指定した数だけフォントファミリをキャッシュする。 太字や斜体も 同 じ フォントとして数える。 MaxStyles1書体につき、指定した数だけフォントスタイル別データをキャッシュする。 ここでいうスタイルとは、太字・斜体・サイズのこと。 MaxBytesラスタライズ済みのビットマップデータをキャッシュする容量の閾値。 上の 2 つの設定よりも優先される。 当然 AntiAliasMode を LCD にすると 3 倍メモリを消費する。 フォントリンク レジストリの設定とは違い、ファイル名は書かない。 当然ながら Individual も有効。ただし、AntiAliasMode はリンク元のフォントと同じになる。 注 レジストリの設定は 見 て い な い ので gdi++.ini に書き写すこと。 フォントの差し替え 従来の ForceChangeFont をフォント別に行えるようにした物。Uniscribe と衝突したりそれが原因で落ちる可能性があるかも知れない。 モジュールリスト プロセス名ではない。ModuleListOrder にて以下の 3 パターンが選択可能。0 Deny のみ使う 1 Allow のみ使う 2 Allow を使いつつ Deny も使うサンプルの例だと hogehook.dll をロードしているプロセスは gdi++ が使えないが、firefox.exe は例外的に gdi++ が使える。 ロードさせたくないプロセス ここに書かれたプロセスから gdi++.dll をロードできなくする。デバッグ中に一部のプロセスが gdi++.dll をロックして上書きできなくなるので 回避策として作った物で普通は使用しない。 履歴 gdi0817からの修正 セル高さの渡し方を変えてみた。 gdi0814からの修正 一部の文字で横長になるのが直ったかもしれない。全く確証なし。直ってない可能性の方が高い。 FontLinkとIndividualを同時に使うと表示がおかしくなることがあるバグを修正。 gdi0813からの修正・変更 ガンマ補正の代わりに使えそうな別の方法を実装してみる実験版。因みに、描画の重さは ガンマ補正 > α値補間 > gdi0811 > 両方off の順。 説明書のHTMLにgdi0814の物(削除された?)をベースにした。 gditrayを更新。gditray.htm を読んでから使うこと。 gdi0811からの修正 INIオプションをカテゴリ分けしてみた。Cache以外は従来どおりGeneralに書いても動作するはず。 INIオプションが増えたり減ったり名前変更されたりした。 MaxBytesのGC処理を少し変えた。 SelectObjectの回数を減らしてみたら少し速くなった。 メモリ確保に Doug Lea malloc (dlmalloc) を使うようにした。 説明書をHTML化。読めればいいかぐらいの感覚で書いてるので多分タグの閉じ忘れとかがあると思う。 gditrayを更新。gditray.htm を読んでから使うこと。 gdi0809からの修正 32ビットDIBの上位8ビットをクリアするようにした。たまにここにゴミがあると表示がバグるVGAドライバがあったりするので。 一応gdi0810の不具合修正に相当。 gdippMonitorのUI周りのバグ修正。 gdi0800からの修正 高さが1pxぐらいの文字を描画すると落ちるのを修正。 gdippMonitorのGUI化。 gdi0793からの修正 Saturationオプションを追加。 特定の環境で1文字だけの行が正しく描画できない問題の回避策を書いた。 gdi0791からの修正 αブレンドにSSE2を使った。 文字の右端1pxが色化けする事があるのを修正。 Courier Newなどの下線が出なかったので描画領域を広げてみた。 Firefox3.0αで文字がまともに出るようにした。opacityで左に1px欠けるのは直し方分からず。 HintingModeとAntiAliasModeの動作を変えてみた。具体的には、LightをHintingModeに移して、それぞれ 0 が無効扱いにした。 因みに、Lightを有効にするとFreeType内部でAutoHintingも有効になるらしい。 40335からの修正 αブレンドにMMX2を使った。 太字化を少し弄った。 斧がよく落ちてるので公式あぷろだに上げることにした。 40202からの修正 フォントによっては上下にずれることがあるのを修正。 フォントによっては右側が欠ける事があるのを修正。両方ともM+2P+IPAG.otfで発見。gdi++のデバッグに便利なフォントだ・・・。 Smudger Alts LETというフォント(Office付属品?)の10pt台を使うと消費メモリ量が爆発的に増えるバグを修正。 VC++の吐いたSSE最適化コードでゼロ除算していた模様。 memcpy/memsetにmovdqa/movdquを使ったら少しだけ速くなった。 40173からの修正 OTFなどにフォントリンクできないバグを修正。 メニューなどの文字が出ないことがあるのを修正。寝ぼけていたのか、ScriptStringAnalyseに渡すパラメータが滅茶苦茶だった。 40078からの修正 フォントリンクのバグを修正。 ビットマップのキャッシュ方法を変更。 キャッシュ管理ルーチンを半分ぐらい書き直し。ガベコレのオーバーヘッドが減った。 39696からの修正 gdippMonitorの重大なバグを修正。( 756) Bold用のフォントが別にある場合に2重に太くしていたバグを修正。( 760) αブレンド部分に手を加えたので少しだけ軽くなった。 フォントリンクのような物に対応してみる。これのせいで結構ソースが書き換わったので前より不安定かも知れない。 CacheMaxBytesの動作変更。 Uniscribeを使用して本物のExtTextOutWの内部動作を真似てみる。 既知の不具合 ??? 制限 割と ExtTextOutW の内部動作に基づいているので、サービスパックなどの更新で動かなくなる可能性が無いとは言えない。大きなアップデートがもう来ない Windows 2000 ではまず問題は出ないだろうけど。 安全性のため SSE2 非対応CPU、ver2.3.5 以外の FreeType では使えない。 ソースコード無ぇよ正式版で公開予定。 仕様 HTMLのソース(ry W3C(ry lint(ryどなたかが修正してくれたみたい。感謝。 1 文字だけの行などに gdi++ が適用されない事がある一部 OS の ExtTextOutW は初期設定では Uniscribe の扱いがいい加減だから。 付属のw2kfix.regを読み込ませて OS を再起動すれば直るはず。 これは gdi++ スレ 6px の 530 に出てた情報。 ※Windows 2000、東アジア版以外のWindows XP gdippMonitor で「更新」すると、しばらくボタンが灰色になって更新できないgdi++.dll の情報取得処理は割と重いので、連打できないようにしてある。 manifest を除去してあるので、対応ソフト以外(※)では使えない。※gdippin、HookInjection など。 freetype.dll と detoured.dll を PATH の通ったフォルダにコピーするか gdi++.dll のあるフォルダを PATH に追加すれば使える。 gdi++.exe(付属)、gditray、gdippManager は問題無し。 今後の予定 縦書きの完成 ソース公開 ソースの配布ライセンスをどうするか今のところ GPL や FTL に該当するソースを含んでないので GPL でも FTL でもない。 多分 gdi0300 ぐらいの頃と同じ ◆0x0D/0x20I氏の配布条件 に従うと思う。
https://w.atwiki.jp/helium/
概要 gdi++.dll のコアエンジン( Helium と呼ぶ事にする)をフルスクラッチした。 具体的には SourceMonitor で Max Complexity が 30 以下。 FreeType の内蔵キャッシュの使用を廃止し、メモリ管理を見直した。 MS Pゴシックなどの太字やイタリック体をエミュレートしているフォントで FontStream を使いまわす事にした。 必要最低限の API のみをフックする。後は GDI に任せる。 安定性の向上。致命的なバグがない限り前のバージョンよりは安定するはず。 現在進行形 2007/11/07現在実験版です。 リンクから探してください。 関連ツール gditray Manager(gdi++ @ wiki)
https://w.atwiki.jp/cnc3/pages/23.html
Radar Scan 300 2 00 1分間だけ目標地点を見えるようにし、また、ステルスユニットを見つけることができる。(Command Post) Orca Strike 500 5 00 Orca3機で攻撃する。 安価なせいか、破壊力はかなり低い。使いどころが難しいところ。(Airfield) Bloodhounds 3000 3 00 ベテランPitbull2機とベテランAPC2機を指定地点に空輸、配備する。 目標地点の周辺に敵の対空兵器があると、展開前に撃ち落とされてしまうので注意。(Airfield) GDI Airborne 15002 00 ベテランRifleman Squad2部隊とベテランMissile Squad2部隊を配備する。(Armory) 目標地点の周辺に敵の対空兵器があると、展開前に撃ち落とされてしまうので注意。 Sharpshooter Team 3500 4 00 ベテランSniper Team3部隊を配備する。(Tech Center) 目標地点の周辺に敵の対空兵器があると、展開前に撃ち落とされてしまうので注意。 Zone Trooper Drop Pods 4500 2 00 ベテランZone Trooper3部隊を配備する。(Space Command Uplink) 目標地点直上からポッドが落下、展開するため、対空兵器に撃ち落される危険は無い。 Shockwave Artillery 2000 3 00 小規模な爆発に加えて、車輌、建物の機能を一時的に停止させるEMPダメージを引き起こす。(Space Command Uplink) Ion Cannon 0 7 00 破壊力絶大のイオン砲をぶっ放す。(Ion Cannon Control Center)
https://w.atwiki.jp/gdiplus2/pages/36.html
簡易履歴(作業工程は省略) http //free.flop.jp/gdi++/ IVS対応 847 850 FontLoader廃止(0848で復帰) 847 バッファオーバーラン修正 787 TLSのリーク修正 777 StringCch系を使って安全に 770 Link/Substitutes/ForceChangeをDllMainの外に 768 排他制御変更 std map - ATL CSimpleMap 765(SSE2) Detours.dll DDKビルド 763 ソース刷新 761 762 フック処理変更 761 717 Light-LCDとRenderWeightのテスト 715 717 -waitオプション追加(680で廃止) 672 Vista対応テスト 659(パッチ) 662 GetGlyph(ry→FT_Glyph(ryの試作 612 613 657 669 672 680 計算関連のバグ修正 608 609 613 606 グリフ取得置き換えテスト 606 FontSubstitutes テスト 593 602 斜体選択時のズレ修正 589* 末尾が...になる対策 583 589 593 FontLinkテスト 572 578 582 カレントディレクトリ修正 577* 570 高速化 変換スキップ等 557 570* コントラスト実装/ガンマ調整 534 545* ガンマ実装 459 470 529* Manager修正 466* 斜体修正 504* GetGlyphOutlineテスト 456 489 392(424) 補足 カッコ内数字 補完アップロード 列が同じ 同一修正が複数版にマージされている 行が同じ 同一目的の修正が続けられている 行先頭 ベースビルド(ソース) アスタリスク 作業終了(もしくは安定版/ベース候補/マージ済み) ICC9氏ビルド一覧 Base 1st 2nd 3rd gdi0682.zip gdi0683.zip gdi0696.zip gdi0704.zip 0680 NormalWeight 変更 gdi0680.zip gdi0681.zip 0672 修正 gdi0657.zip gdi0658.zip 0652 の修正 gdi0652.zip gdi0653.zip 0650 の修正 gdi0650.zip gdi0651.zip 0648 の修正 gdi0645.zip gdi0646.zip 0641 の修正 gdi0641.zip gdi0643.zip 0639 修正 gdi0634.zip gdi0637.zip 0632 の修正 gdi0632.zip gdi0633.zip 0629 の修正 gdi0624.zip gdi0627.zip 0616 の修正 gdi0616.zip gdi0618.zip 0613 の修正 gdi0613.zip gdi0614.zip 0609 に 0612 をマージ gdi0608.zip gdi0611.zip ? gdi0602.zip gdi0604.zip 0596 文字欠け対策 gdi0596.zip gdi0597.zip 0593 修正 gdi0593.zip gdi0595.zip ... テスト4 + α gdi0572.zip gdi0574.zip FontLinkテスト暫定 gdi0570.zip gdi0571.zip 0567 の修正 gdi0567.zip gdi0569.zip 文字ズレ対策 gdi0564.zip gdi0566.zip 0562 修正 gdi0545.zip gdi0550.zip 0540 の修正 gdi0537.zip gdi0538.zip ? gdi0524.zip gdi0528.zip gdi0530.zip ?
https://w.atwiki.jp/abwiki/pages/476.html
Windowsのグラフィクス全般を扱うサブシステムで、その内容は比較的広範囲で難易度は高め。 Windowsではすべてのグラフィクスはデバイスコンテキストというハンドル(ポインタ) によって示されるメモリー領域にアクセスする。 このデバイスコンテキストは、デバイスに依存しない形でデータを保存している。 データタイプが汎用的で特定のグラフィクスデバイスに依存しないが、やや抽象的で 実体がないデータだ。これをDIBといい、デバイス非依存ビットマップという。 通常、ウインドウズ上でグラフィクスを扱う時は、このDIBを扱っている事になる。 これに対し、DDBというものがある。これはデバイス依存ビットマップと呼ぶ。 データの構造がディスプレイデバイスに強く依存したもので、ウインドウズでは、 これらのDDB,DIBというレイヤーを通してグラフィクスを扱っている。 普段、画面の解像度を気にせずにソフトウエアを扱えるのも、こうした抽象レイヤーの存在が大きい。 例えば、画面の色数のプロパティが16bit(6万色)しかないのに、ほぼ全てのアプリケーション が32bit色数で作られても変更無く動作するのは、抽象的なDIBに対してグラフィクスを描画し、DDBに 変換し、グラフィクスドライバがグラフィックチップへ書き込んでいるため。 これに対して、DDBであるDirectXなどのプログラミングでは、アプリケーションの初期化時に、 必ず画面の解像度や色数を指定する。 DirectXでは高速な画面描画が必要になるため、デバイスに強く依存したディスプレイ構造を扱う。 同じように、SVGAグラフィックやN88Basicの頃のグラフィックは、Screen命令を使い、 画面モードを強く意識するのでDDBの一種とも言える。 DIBは、抽象的なデータなので、プリンターに関係したり、BMP画像フォーマットになっている。 BMP形式の非圧縮画像データは、まさにDIBの構造をそのままファイル形式とした仕様となっている。 GetDC()で得られるものは、デバイスコンテキストに対するハンドルだ。これは単なるDWordポインタ。 ReleaseDC()なるものが存在するのは、デバイスコンテキストの中には共有ロック してハンドルを排他制御するものがあるので、この関数がある。 通常、DIB形式のグラフィクスを新規に作る場合は、CreateDC()やCreateCompatibleDC() などを使う。これらによって作成されたデバイスコンテキストは、メモリ内に 作成されるため、メモリデバイスコンテキスト等と呼ぶ。 これに対して、CreateBitmap(),CreateComatibleBitmap()関数は、DDB形式のデータを 作成する。一つのDIBデバイスコンテキストにDDBを作る場合には、SelectObject() を使う。 これらのデバイスコンテキストはビットマップでメモリーを消費するので、使用後はメモリーを開放する。 DeleteDC()などがそれ。 通常、Windowsなどの描画は、ウインドウなどの枠がシステムによって書かれるが、クライアント領域は アプリケーション依存なので関与しない。 ウインドウ関連の描画について、前者をコントロール、といい、後者をビューという事もある。ビューは最初から 備わっているわけではなく、アプリケーションを作成する者が必要に応じて作成し、画面を描く事になる。 アプリケーションのロジックは、モデルと呼び、三つの頭文字をとってMVCと呼ぶ。
https://w.atwiki.jp/gdiplus2/pages/26.html
1.使い方 2.バイナリ 3.readme 4.SS 5.履歴 使用にあたって 使い方 オプション一覧 使用にあたって 言うまでも無く、非常に危険な代物です。ソフトウェアの挙動を理解した上でご利用ください。CPUパワーを必要とするので、できるだけハイスペックなPCをお奨めします。 現在のところ、Windows 2000/XP で動作するハズですが、基本的にXPでのみ動作確認しています。使用は自己責任でお願いします。どんな損害がおこっても補償できません。 使い方 仕掛けたい実行ファイルをgdi++.exeにドラッグ ドロップすると、フックされた状態で起動します。Windows標準のコントロールのフォント描画にも影響が及びます。 オプション一覧 設定ファイル"gdi++.ini"を同じディレクトリに置くことで、レンダリングの設定ができます。(なくても動きます) [General] Quality=1 Weight=0 Enhance=0 UseSubPixel=0 SubPixelDirection=0 MaxHeight=0 ForceAntialiasedQuality=0 [Exclude] FixedSys Marlett メイリオ [Individual] Tahoma=3 [ExcludeModule] iexplore.exe firefox.exe Qualityフォントの品質を調節します。0 何もしない 1 2倍キレイ(デフォルト) 2 3倍キレイ 3 4倍キレイ Weightフォントの濃さを調節します。(n + 1)回重ねて描画します。 Enhance水平・垂直の輪郭線を強調します。0 強調しない(デフォルト) 1 少し強調 2 ふつうに強調 3 強く強調 4 激しく強調 UseSubPixel簡易サブピクセルレンダリング(ClearTypeもどき)を有効にします。0 つかわない(デフォルト) 1 つかう SubPixelDirectionサブピクセルレンダリングを使うときの、サブピクセルの並び順を指定します。ほとんどの液晶モニタは左からRGBの順にサブピクセルが並んでいますが、たまにBGRの順で並んでいるモニタもあるようです。0 RGB(デフォルト) 1 BGR MaxHeightスムージングを掛ける最大のフォントサイズを「ピクセル単位で」指定します。0 すべてのサイズ(デフォルト) ForceAntialiasedQualityWindowsのClearTypeを無視するかどうかを指定します。無視すれば描画が高速になります。0 標準の品質(デフォルト) 1 ClearTypeを無視 [Exclude]セクション標準のレンダラで描画したいフォントを一行に一書体ずつ記入します。フォント名がリストに合致すれば、gdi++.dll は標準のレンダラに描画を丸投げします。ビットマップフォントや、ClearType系のフォントにどうぞ。 [Individual]セクション指定したフォント毎にWeightを設定できます。 [ExcludeModule]セクションgdi++.dllを適用させたくない実行ファイルを指定できます。このセクションに記述された実行ファイルにはgdi++.dllが適用されません。
https://w.atwiki.jp/sampleisbest/pages/106.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 gdi+test アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode 参考 JPEG(ジェイペグ)やGIF(ジフ)を表示しよう^0^ gdi+test.cpp // GDI+ // Image BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, and EMF #pragma comment(lib, "gdiplus.lib") #include Windows.h #include GdiPlus.h using namespace Gdiplus; // 関数プロトタイプ宣言 LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // 外部変数 TCHAR g_szClassName[] = TEXT("gdi+test"); TCHAR g_szWindowName[] = TEXT("gdi+test"); Image *g_image = NULL; //============================================================================== int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcx; HWND hWnd; MSG msg; ULONG token; GdiplusStartupInput input; // 初期処理 GdiplusStartup( token, input, NULL); g_image = new Image(lpCmdLine); //g_image = Image FromFile(lpCmdLine); // ウィンドウクラスの登録 wcx.cbSize = sizeof (WNDCLASSEX); wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc = WindowProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hInstance; wcx.hIcon = NULL; wcx.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszMenuName = NULL; wcx.lpszClassName = g_szClassName; wcx.hIconSm = NULL; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 hWnd = CreateWindow( g_szClassName, g_szWindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } // 終了処理 delete g_image; GdiplusShutdown(token); return msg.wParam; } //------------------------------------------------------------------------------ LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); Graphics g(hdc); g.DrawImage(g_image, 0, 0); EndPaint(hWnd, ps); } break; case WM_DESTROY PostQuitMessage(0); break; default return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; }